Mise � jour : 03 Fevrier 1997 .

Initiation � la programmation en Turbo PASCAL

TP Num�ro 1

T�l�chargement !
UN.PAS

program un; {Mon premier programme en Pascal}
USES CRT;
Var a:char; {D�clare la variable 'a' comme un caractere}
Begin
    clrscr; {efface l'�cran}
    writeln('Bonjour les amis'); {Affiche 'Bonjour les amis' � l'�cran}
    a:=readkey; {attente d'une touche clavier}
End.

Lancez le programme en cliquant sur RUN. Le programme va etre compil� et ex�cut� . En cas d'erreur de syntaxe, v�rifiez bien votre listing (n'oubliez pas la ponctuation ; , . (etc))
Attention , le compilateur ne s'arrete pas toujours sur la cause de l'erreur, il faut parfois regarder la ligne pr�c�dente ! Souvent vous oublierez un point virgule ou un point sur la ligne pr�c�dente.


TP Num�ro 2

T�l�chargement !
DEUX.PAS

program deux; {Initiation Turbo Pascal}
USES CRT;
Var a:char;
ma_chaine:STRING; {'ma_chaine'est d�clar�e comme chaine de caract�res}
Begin
    clrscr; {efface l'�cran}
    writeln('Entrez un texte de moins de 255 caract�res');
    writeln('Puis appuyez sur entr�e');
    readln(ma_chaine); {Lecture de caract�res au clavier}
    writeln;
    write('Ce que vous venez de taper est : ');
    writeln(ma_chaine);
    a:=readkey; {attente d'une touche}

    {Note : writeln permet de faire un passage � la ligne �
    la diff�rence de write qui permet d'�crire � la suite}

End.
Lancez le programme en cliquant sur RUN.
'ma_chaine' est une variable ou vous pourrez stoker du texte.
Si vous utilisez une variable non d�clar�e, le compilateur affichera un message d'erreur (et oui c'est pas du Basic !).



TP Num�ro 3

T�l�chargement !
TROIS.PAS

Sans structure de contr�le, un langage de programmation serait bien limit� (Du genre HTML par ex) . Voici donc pour commencer le programme TROIS.PAS qui contient 2 boucles :

-La premi�re For I=1 to 100 ..... permet d'�xecuter 100 fois des instructions. On aurait pu �crire aussi For i=200 to 999 ou for i=1 to 4 pour r�aliser 800 ou 4 it�rations ...

-La seconde Repeat ... until est ex�cut�e tant que l'on n'appuie pas sur la touche 1. On pourrait tr�s bien mettre une autre condition de sortie .

program trois; {Les structures de controle}
USES CRT;

Var a:char;
i: Integer; {Declare i comme un nombre entier}

Begin
    clrscr; {efface l'ecran}
    for i:=1 to 100 do
    begin
      write('i=',i,' ');
      {Toutes les instructions que vous mettrez ici seront execut�es 100 fois}
    End;
    a:=readkey; {attente d'une touche}

    repeat
      writeln('Appuyez sur 1 pour sortir cette boucle');
      a:=readkey;
      writeln('Code de la touche :',ord(a));
    Until a='1';
End.



TP Num�ro 4

T�l�chargement !
QUATRE.PAS

Structure de contr�le suite : IF condition THEN action ELSE autre_action.
SI (la condition est vraie) ALORS j'ex�cute action SINON j'ex�cute autre_action.
Voici un programme d'exemple : Il suffit de le lire et l'�x�cuter pour comprendre :

program Quatre;     {Les structures de controle suite}

USES CRT;

Var a:char;
    ma_chaine:STRING; {'ma_chaine'est declaree comme chaine de caracteres}
    i: Integer;       {Declare i comme un nombre entier}

Begin
  clrscr;     {efface l'�cran}
  { La struture de controle IF (condition) THEN action ELSE action }
  writeln(' EXEMPLE 1: IF sans ELSE :');
    writeln('Tapez sur la touche A ou la touche B (echap pour sortir)');

  repeat
    a:=UPCASE(readkey);   {Upcase transforme une lettre minuscule en majuscule}
    if a ='A' THEN
    Begin
       writeln('Vous avez appuye sur la touche A');
    End;
    if a ='B' THEN
    Begin
       writeln('Vous avez appuye sur la touche B');
    End;
  until ord(a) = 27;  {code ascii de touche ECHAP =27}


  writeln(' EXEMPLE 2: IF avec ELSE :');
   writeln('Tapez sur la touche A ou autre (echap pour sortir)');

  repeat
    a:=UPCASE(readkey);   {Upcase transforme une lettre minuscule en majuscule}
    if a ='A' THEN
    Begin
       writeln('Vous avez appuye sur la touche A');
    End        {Remarquez qu'il n'y a pas de point virgule ici}
    Else       {c'est que a<>'A'}
    Begin
       writeln('Vous avez appuye sur une autre touche ');
    End;
  until ord(a) = 27;  {code ascii de touche ECHAP =27}

End.



TP Num�ro 5

T�l�chargement !
CINQ.PAS

Et maintenant , nous allons faire notre premier petit jeu ! Nous utilisons quelques instructions suppl�mentaires (Trunc , random...) mais cela n'est pas compliqu� � comprendre !
NOTE : Random renvoie un nombre r�el d'o� l'obligation de d�clarer la variable nb_alea comme REAL . Pour obtenir ensuite uniquement la partie enti�re, nous utilisons TRUNC qui renvoie lui un entier (d'ou la d�claration de nb_recherche comme INTEGER)

program Cinq;     {Mon premier petit jeu}

USES CRT;

Var a:char;
    ma_chaine:STRING; {'ma_chaine'est declaree comme chaine de caracteres}
    i,nb,inf,sup,nb_recherche: Integer;
    nb_alea:real;
BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;
  inf:=0;
  sup:=100;
  randomize;   {pour avoir un nb al�atoire different a chaque lancement
                          du programme}
  nb_alea :=random(100); {Initialise un nombre al�atoire &Lt 100 }
  nb_recherche:=TRUNC(nb_alea); {Prend la partie enti�re}

  writeln('Objectif du jeu : trouver un nombre cach� ');
  writeln('Pour arreter le jeu tapez un nombre > 100');

  repeat

    writeln('Entrez un nombre compris entre ',inf,' et ',sup);
    readln(nb);
    if nb > nb_recherche then  sup:=nb; {Pour r�duire l'intervale}
    if nb &Lt nb_recherche then  inf:=nb;

  until (nb=nb_recherche) or (nb > 100); {conditions de sortie}

  if nb=nb_recherche then
  Begin
    writeln('BRAVO ! Vous avez gagn� !');
    sound(440);  {jouer un son}
    Delay(500);
    nosound;
    a:=readkey;
  End;

END.



TP Num�ro 6

T�l�chargement !
SIX.PAS

Programme de RESOLUTION D'UNE EQUATION DU SECOND DEGRE.
La gestion des erreurs de frappes est mieux g�r�e ici gr�ce � l'utilisation de l'instruction VAL qui permet de r�cup�rer la valeur num�rique d'une variable de type Chaine (string) (En effet , si vous faites readln(a), avec a variable num�rique, si vous entrez au clavier 'toto', le programme plante. Par contre, avec readln(a1), a1 d�clar� comme string, si vous entrez 'toto', le programme ne plante plus .
Remarque : VAL('Toto',a,err) renvoie dans a la valeur 0
mais VAL('123',a,err) renvoie dans a la valeur 123 ...nuance !
Err est un param�tre obligatoire mais ici inutile.

Note : Pour les �l�ves de Terminale : Essayez de modifier le programme pour trouver les solutions dans C .

program Six;     {r�solution d'une Equation}

USES CRT;

Var ch:char;
    err : integer;
    {*** Variable pour mes equations *****}
    A1,B1,C1,Xm1,Xm2 : STRING;
    A,B,C,DELTA,X1,X2 : Real;
BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;
  repeat
    writeln;
    writeln;
    writeln('R�solution d''une Equation du Second degr� ');
    writeln('Du type Ax^2+Bx+c = 0');
    writeln('Vous devez entrer les coefficient A,B et C');
    Write('Entrez A :');
    readln(A1);
    VAL(A1,A,err);   {A1 string est transform�e en A valeur num�rique integer}

    Write('Entrez B :');
    readln(B1);
    VAL(B1,B,err);   {B1 string est transform�e en B valeur num�rique integer}

    Write('Entrez C :');
    readln(C1);
    VAL(C1,C,err);   {C1 string est transform�e en C valeur num�rique integer}

    DELTA := B*B-(4*A*C);
    IF (DELTA < 0) THEN
    Begin
      Writeln('Pas de solution dans R, Delta n�gatif =',DELTA);
    End
    ELSE
    IF (A = 0) THEN
    Begin
      Writeln('A = 0, ce n'est pas une Equation du second degr�');
    END
    ELSE
    BEGIN
      X1:=(-B-SQRT(DELTA))/(2*A);
      X2:=(-B+SQRT(DELTA))/(2*A);
      writeln(' Les solutions sont :');
      writeln(' X1 = ',X1);
      writeln(' X2 = ',X2);
      str(X1:10:3,Xm1);  {Valeur X1 transform�e en chaine caract�re Xm1}
      str(X2:10:3,Xm2);  {10 et 3 repr�sente formatage c-a-d le nb de chiffre avant et
                          apr�s la virgule}
      writeln('Et de fa�on plus lisible :');
      writeln(' X1 = ',Xm1);
      writeln(' X2 = ',Xm2);
    END;
    Writeln('Voulez vous sortir ? (O/N)');
    ch:=readkey;
  Until (UPCASE(ch)='O') OR (ORD(ch)=27);   {O ou Echap pour sortir}
END.


Avant de faire du graphisme, on va quand m�me voir la notion de procedures (sous programmes).


TP Num�ro 7

T�l�chargement !
SEPT.PAS

NOTIONS DE PROCEDURES

Une procedure est un sous programme que l'on peut appeler plusieurs fois � partir du programme principal ou d'une autre procedure ou fonction. Dans notre exemple nous avons d�clar� 4 procedures (totot1 � toto4) appel�es � partir du programme principal.
Dans une procedure , vous pouvez d�clarer des variables locales qui seront cr�es � chaque appel de la procedure et d�truites � la fin de l'ex�cution de la procedure.
Les variables globales (declar�es au debut de votre programme) sont aussi utilisables dans les procedures .
Attention : si vous red�clarer la variable Glob1 (variable globale) dans une procedure, le compilateur va accepter mais il faut savoir alors que Glob1-variable globale- n'est plus accessible par la dite procedure. En effet c'est une variable Glob1 locale qui est cr�e et diff�rente de Glob1 globale (bien que portant le m�me nom !)

Analysez le programme ci-dessous , testez le et faites des modifications pour essayer de bien comprendre.
Essayez d'appeler la procedure toto1 par toto2.
program Sept;     {Appel de procedures}

USES CRT;

{*** Les variables globales de mon programme sont declarees ici ***}
Var ch:char;
    err : integer;
    glob1,glob2: integer;

{*** D�claration de mes procedures ***}
Procedure Toto1;
Begin
  writeln;
  writeln('Execution de la procedure Toto1');
  writeln(' J''affiche n''importe quoi ');
  writeln('... et on sort de la procedure toto1');
  writeln;
End;

Procedure Toto2;
Var a,b : Integer; { a et b variables locales ne sont connues que par la procedure toto2}
Begin
  a:=10;
  b:=15;
  writeln;
  writeln('Execution de toto2');
  writeln('a = ',a);
  writeln('b = ',b);
  writeln('Fin d''execution de toto2');
  writeln;
End;

Procedure Toto3(x,y : integer );
Begin
  writeln;
  writeln('Execution de toto3: x et y sont pass�s en  param�tres');
  writeln('x= ',x);
  writeln('y= ',y);
  x:=x+y;
  writeln('Je modifie la valeur de x :');
  writeln('x:=x+y = ',x);
  writeln('Fin d''execution de toto3');
  writeln;
End;

Procedure toto4(x,y : integer);
Var a,b : real;  {variables de type reel declar�es en local}
Begin
  writeln;
  writeln('Execution de toto4');
  b:=100;
  a:=glob1+glob2+b;  {Je peux utiliser glob1 et glob2 dans mes proc�dures }
  writeln('Dans toto4 a = ',a);
  writeln('Fin de toto4');
  writeln;
End;


BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;

  repeat
   clrscr;
    { Appel de la procedure toto1 }
    toto1;
    { Appel de la procedure toto2 }
    toto2;

   {Appel de la procedure toto3 avec 2 parametres: Glob1 et Glob2 }
    glob1:=10;
    glob2:=20;

    toto3(glob1,glob2);
    writeln('... mais Glob1 et glob2 ont gard� leur valeur');
    writeln('Glob1 = ',glob1);
    writeln('Glob2 = ',glob2);
    writeln('Appuyez sur une touche pour executer toto4');
    ch:=readkey;
    toto4(glob1,glob2);
    Writeln('Voulez vous sortir ? (O/N)');
    ch:=readkey;
  Until (UPCASE(ch)='O') OR (ORD(ch)=27);   {O ou Echap pour sortir}
END.

NOTE : Naturellement nous n'avons pas fait le tour de la question au sujet des procedures (loin s'en faut ...) mais c'est largement suffisant pour commencer !


TP Num�ro 8

T�l�chargement !
HUIT.PAS


LES GRAPHISMES

Voici comment initialiser le mode graphique haute r�solution en Turbo Pascal . J'ai mis quelques instructions de base pour r�aliser des lignes changer les couleurs ... etc .
Les coordonn�es de l'�cran (0,0) commencent en haut � gauche.

Notes Importantes :

1) Vous devez sp�cifier le chemin d'acc�s du r�pertoire BGI de Turbo Pascal (cela d�pend de votre installation) dans l'appel d'initgraph, sans quoi �� ne marche pas !

2) Si votre compilateur affiche "graph.tpu" non trouv�, recherchez ce fichier dans le r�pertoire Units et recopiez le dans votre r�pertoire courant (o� se trouve votre programme) . Vous pouvez aussi sp�cifier les chemins d'acc�s des .exe et Tpu dans "directories" du menu option de Turbo pascal.

3) A l'avenir, si vous rencontrez ce genre de probl�me, faites tout d'abord BUILD (au lieu de COMPILE) puis si le pb persiste recherchez et recopiez les fichiers dans le r�pertoire courant.

Le programme :
PROGRAM Huit;     {Programme graphique}

USES CRT,Graph;
Var pilote,mode,i,fonte,direc,taille: Integer;
    x,y:real;

    a: char;


Begin
  pilote:=DETECT;  {Initialisation du mode graphique}
  InitGraph(pilote,mode,'c:\tp7\tp\bgi'); {Donnez le chemin du repertoire bgi}

   {**** Instructions pour tracer des lignes et changer couleur ****}

   setcolor(white);       {choisissez la couleur}
   line(10,10,200,200);   {dessine une ligne du point coordonnees (10,10)
                           au point (200,200)}
   setcolor(red);
   lineto(70,350);
   setcolor(5);           {15 max pour la couleur}
   lineto(500,350);       {Trace une ligne � partir du dernier point}

   putpixel(400,50,yellow); {dessine un point jaune en haut a droite ecran}

     {******  Affichage du texte ******}
   fonte:=2;    {0 � 4}
   direc:=0;    {0 ou 1}
   taille:=8;   {facteur d'agrandissement}
   setcolor(blue);
   settextstyle(fonte,direc,taille);
   outtextXY(100,50,'Appuyez sur une touche :'); {Ne pas utiliser writeln !!}
   a:=readkey;

     {******* Courbe sinus ********}
   x:=0;
   for i:=0 to 1000 do
   begin
     x:=x+0.05;
     y:=100*sin(x);    {Pour avoir une courbe sinus}
     putpixel(trunc(x*10),200-trunc(y),yellow); {trunc renvoie la partie entiere}
   end;

  a:=readkey;
  closeGraph;         {Ferme le mode Graphique}
End.



Captur� par MemoWeb � partir de http://www.guetali.fr/home/creole/debutant.htm le 10/02/97